# -*- coding: utf-8 -*-
# Python中默认的编码格式是 ASCII 格式，在没修改编码格式时无法正确打印汉字，所以在读取中文时会报错。

# Python的字典是一种哈希表类型。它们像Perl中发现的关联数组或散列一样工作，由键值对组成。
# 字典键几乎可以是任何Python数据类型，但通常为了方便使用数字或字符串。另一方面，值可以是任意的Python对象。

# 字典(dictionary)是除列表以外python之中最灵活的内置数据结构类型。列表是有序的对象集合，字典是无序的对象集合。
# 键在字典中是唯一的，而值可以不必是唯一的。字典的值可以是任何类型的，但是键必须是不可变的数据类型，例如字符串，数字或元组
# dict[[1, 2, 3]] = 1  list是可变的数据类型，所以键是不可以为list。

# 在其他语言中也称为map，使用键-值（key-value）存储，具有极快的查找速度。

# 为什么dict查找速度这么快？因为dict的实现原理和查字典是一样的。
# list查询方法：们要查某一个字，一个办法是把字典从第一页往后翻，直到找到我们想要的字为止，
# 这种方法就是在list中查找元素的方法，list越大，查找越慢。
# dict查询方法：先在字典的索引表里（比如部首表）查这个字对应的页码，然后直接翻到该页，找到这个字。
# 无论找哪个字，这种查找速度都非常快，不会随着字典大小的增加而变慢。

# 和list比较，dict有以下几个特点：
#
# 查找和插入的速度极快，不会随着key的增加而变慢；
# 需要占用大量的内存，内存浪费多。
# 而list相反：
#
# 查找和插入的时间随着元素的增加而增加；
# 占用空间小，浪费内存很少
#
# python字典和集合的速度是非常快的，列表比较慢
# dict是典型的空间换时间

dict = {}
dict['one'] = "This is one"
dict[2] = "This is my"

tinydict = {'name': 'maxsu', 'code': 1024, 'dept': 'IT Dev'}
l = tinydict.items()
print(type(l))


print(tinydict.get('name', ))                                   # 获取key中的value
print(tinydict)


for i in dict:
    if i == 2:
        print(i)

# # 另一种创建方式
# alien1 = {
#     'color': 'green',
#     'point': '5',
#     'jeb': '10',
# }
#
# print("迭代key")
# for i in alien1.keys():
#     print(i)
#
# # 迭代value
# print("同时输出key和value")
# for value in alien1.items():
#     print(value)
#
# dic = {"a":1,"b":2,"c":3}
# for i in dic:
#     print(i)
#     print(dic[i])
#
#
# # 同时迭代key和value     如果v对我们没有什么用 可以使用占位符_代替
# print("可选择输出")
# for k, v in alien1.items():
#     print(k)
#     print(k, v)

# dict的values，keys可以转化为list
# list(dic.values())
# list(dic.keys())

# dict.get(key, default=None)
#
# key -- 要查找的键。
# default -- 如果指定键的值不存在，返回该默认值。
#
# >>> a={"Kobe":24, "T-mac":1}
# >>> a.get("Kobe")
# 24
# >>> a.get("AI", 3)
# 3